iBATIS (এখন MyBatis নামে পরিচিত) একটি persistence framework যা Java অ্যাপ্লিকেশনগুলির জন্য SQL-based object-relational mapping (ORM) প্রদান করে। এটি Hibernate বা JPA-এর মতো পূর্ণাঙ্গ ORM সমাধান না, বরং এটি Java objects এবং relational databases এর মধ্যে সম্পর্ক স্থাপনে SQL কুয়েরি লেখার জন্য সাহায্য করে। iBATIS/ MyBatis ডেটাবেসের সাথে যোগাযোগ করার সময় ডেভেলপারদের SQL কুয়েরি সরাসরি লিখতে দেয়, যা ডেটাবেস পরিচালনার জন্য অনেক বেশি নিয়ন্ত্রণ এবং কাস্টমাইজেশন প্রদান করে।
এখানে আমরা iBATIS এর কাজের ধাপ এবং স্থাপত্য বিশ্লেষণ করব।
iBATIS এর কাজের ধাপ
iBATIS (MyBatis) কার্যকরভাবে কাজ করার জন্য কিছু নির্দিষ্ট ধাপ অনুসরণ করে। এই ধাপগুলো নিম্নরূপ:
1. Configuration File (SQLMapConfig.xml) তৈরি করা
iBATIS এর প্রথম ধাপ হল SQLMapConfig.xml কনফিগারেশন ফাইল তৈরি করা। এই ফাইলটি iBATIS এর সেশন কনফিগারেশন এবং SQL কুয়েরি ম্যাপিং সংক্রান্ত সমস্ত তথ্য ধারণ করে। এটি সিস্টেমের সেশনের সাথে যোগাযোগ করে এবং SQLMap এর মাপিং ফাইলের রেফারেন্স দেয়।
<sqlMapConfig>
<sqlMap resource="com/example/Employee.xml"/>
</sqlMapConfig>
এখানে:
- sqlMapConfig: মূল কনফিগারেশন ফাইল যা iBATIS কে SQLMap ব্যবহার করার জন্য নির্দেশনা দেয়।
- sqlMap resource: একটি রিসোর্স যা SQL কুয়েরি এবং Java অবজেক্ট ম্যাপিং সংক্রান্ত ফাইলের রেফারেন্স প্রদান করে।
2. SQL Mapping File (SQLMap.xml) তৈরি করা
SQLMap ফাইলের মধ্যে SQL কুয়েরি এবং Java objects এর মধ্যে সম্পর্ক স্থাপন করা হয়। এখানে SQL কুয়েরি এবং Java beans এর মধ্যে mapping সেট করা হয়।
<sqlMap namespace="Employee">
<select id="getEmployeeById" parameterClass="int" resultClass="com.example.Employee">
SELECT id, name, salary FROM employee WHERE id = #id#
</select>
</sqlMap>
এখানে:
- namespace: SQLMap-এর জন্য একটি ইউনিক নাম যা কুয়েরি আইডি গুলিকে শনাক্ত করতে সাহায্য করে।
- select: SQL কুয়েরি, যেখানে
idএর মাধ্যমেEmployeeরেকর্ড রিটার্ন করা হয়।
3. Java Code (SqlMapClient)
Java কোডে, আপনি iBATIS এর SqlMapClient ব্যবহার করে SQL কুয়েরি চালাবেন। SqlMapClient হল iBATIS এর মেথড কল করার মূল API, যেটি SQL কুয়েরি চালানোর জন্য ব্যবহৃত হয়।
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import java.io.Reader;
public class Main {
public static void main(String[] args) throws Exception {
// SQLMapClient তৈরি করা
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
// Employee রেকর্ড আনা
Employee employee = (Employee) sqlMap.queryForObject("Employee.getEmployeeById", 1);
// Employee প্রিন্ট করা
System.out.println("Employee Name: " + employee.getName());
}
}
এখানে:
- SqlMapClientBuilder: এটি
SqlMapConfig.xmlকনফিগারেশন ফাইল ব্যবহার করেSqlMapClientতৈরি করে। - queryForObject: এটি একটি SQL কুয়েরি চালায় এবং রিটার্ন করা রেকর্ডটি Java object হিসেবে রিটার্ন করে।
iBATIS এর স্থাপত্য
iBATIS (MyBatis) স্থাপত্যের মূল উপাদানগুলো হল:
1. SqlMapConfig (Configuration File)
এই ফাইলটি iBATIS এর জন্য একটি কনফিগারেশন ফাইল হিসেবে কাজ করে। এটি SQLMap ফাইলের রেফারেন্স প্রদান করে, যেখানে SQL কুয়েরি এবং Java objects এর মধ্যে সম্পর্ক স্থাপন করা হয়।
2. SQLMap (SQL Mapping File)
এই ফাইলটি মূলত SQL কুয়েরি এবং Java Beans বা POJOs এর মধ্যে ম্যাপিং স্থাপন করে। এখানে SQL কুয়েরি গুলি প্রাসঙ্গিক parameterClass এবং resultClass এর সাথে যুক্ত করা হয়।
3. SqlMapClient
SqlMapClient হল মূল API যা ডেটাবেস অপারেশন করার জন্য ব্যবহৃত হয়। এটি SqlMapConfig.xml এবং SQLMap.xml এর মাধ্যমে SQL কুয়েরি চালানোর সুবিধা প্রদান করে।
4. JDBC Layer
iBATIS একটি JDBC abstraction layer সরবরাহ করে যা ডেটাবেসের সাথে কাজ করার জন্য SQL কুয়েরি এবং Java objects এর মধ্যে পার্থক্য দূর করে। iBATIS টেবিলের মধ্যে সম্পর্কিত Java objects এবং SQL queries এর মাধ্যমে ডেটা সংগ্রহ এবং ম্যানিপুলেট করে।
5. Transaction Management
iBATIS ডেটাবেস ট্রানজেকশন ম্যানেজমেন্টের জন্য নির্ভরশীল। এটি JDBC বা Spring ট্রানজেকশন ব্যবস্থাপনা ব্যবহার করতে পারে।
iBATIS স্থাপত্যের ব্লক:
+-------------------+
| SqlMapConfig |
| (Configuration) |
+-------------------+
|
v
+-------------------+ +-----------------+
| SQLMap |----->| SqlMapClient |
| (SQL Queries) | | (API) |
+-------------------+ +-----------------+
|
v
+-------------------+
| JDBC Layer |
| (Database) |
+-------------------+
iBATIS এর সুবিধা
| ফিচার | বিবরণ |
|---|---|
| SQL Centric | ডেভেলপাররা সরাসরি SQL কুয়েরি লিখে ডেটাবেস অপারেশন পরিচালনা করতে পারেন। |
| Flexibility | SQL কুয়েরি এবং Java beans এর মধ্যে ম্যাপিং সহজে কাস্টমাইজ করা যায়। |
| Easy Integration | সহজে অন্যান্য ডেটাবেস সিস্টেমের সাথে ইন্টিগ্রেশন করা যায়। |
| Lightweight | Hibernate বা JPA এর তুলনায় বেশি লাইটওয়েট এবং সহজ। |
| Full Control | SQL কুয়েরি এবং ম্যানুয়াল মেপিংয়ের মাধ্যমে পুরোপুরি নিয়ন্ত্রণ পাওয়া যায়। |
iBATIS এর অসুবিধা
| অসুবিধা | বিবরণ |
|---|---|
| More Boilerplate Code | SQL কুয়েরি এবং Java beans এর মধ্যে অনেক কোড লিখতে হয়। |
| Lack of Automation | Hibernate বা JPA এর মতো অনেক অটোমেটেড ফিচারের অভাব। |
| Complex Queries | বড় এবং জটিল ডেটাবেস অ্যাপ্লিকেশনে SQL কুয়েরি লেখা সময় সাপেক্ষ এবং জটিল হতে পারে। |
| No Built-in Object-Relational Mapping | Hibernate বা JPA এর মতো অটোমেটিক মডেল মেপিং নেই। |
iBATIS (এখন MyBatis) একটি শক্তিশালী এবং নমনীয় persistence framework যা SQL কুয়েরি এবং Java objects এর মধ্যে সম্পর্ক স্থাপন করতে সাহায্য করে। এটি SQL-centric হওয়ায় ডেভেলপাররা SQL কুয়েরি লিখে ডেটাবেস অপারেশন পরিচালনা করতে পারেন, যা অনেক বেশি কাস্টমাইজযোগ্য এবং নিয়ন্ত্রণযোগ্য। তবে, Hibernate বা JPA এর মতো পূর্ণাঙ্গ ORM সমাধান সরবরাহ না করে, iBATIS জটিল এবং কাস্টম ডেটাবেস অ্যাপ্লিকেশনে ব্যবহৃত হয় যেখানে SQL কুয়েরির উপর পূর্ণ নিয়ন্ত্রণ প্রয়োজন।
Read more